go接口、指针

go 接口

  • 通过考虑数据类型之间的相同功能来创建抽象,而不是相同字段
  • interface{} 的值不是任意类型,而是 interface{} 类型
  • 接口包含两个字的大小,类似于 (type, value)
  • 函数可以接受 interface{} 作为参数,但最好不要返回 interface{}

  • 指针类型可以调用其所指向的值的方法,反过来不可以

  • 函数中的参数甚至接受者都是通过值传递

  • 一个接口的值就是就是接口而已,跟指针没什么关系

  • 如果你想在方法中修改指针所指向的值,使用 * 操作符

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package main
import "fmt"
type LessAdder interface {
Less(INTEGER) bool
Add(INTEGER)
}
type INTEGER int
func (a INTEGER) Less(b INTEGER) bool {
return a < b
}
func (a *INTEGER) Add(b INTEGER) {
fmt.Println(*a) //10
fmt.Println(b) // 40
*a += b
}
func main() {
var a INTEGER = 10
var b LessAdder = &a

fmt.Println(b.Less(20)) //true 等价于a.Less(20)
b.Add(40)
fmt.Println(a) //50
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package main

import (
"fmt"
"math"
)

type Vertex struct {
X, Y float64
}

func (v Vertex) Abs() float64 {
return math.Sqrt(v.X*v.X + v.Y*v.Y)
}

func (v *Vertex) Scale(f float64) {
v.X = v.X * f
v.Y = v.Y * f
}

func main() {
v := Vertex{3, 4}
v.Scale(10) //去掉这一行 5
fmt.Println(v.Abs()) //50
}

https://tour.golang.org/methods/6

感谢你的打赏哦!